// import $ from 'jquery'
// const $ = require('jquery')
// // ------ 对象合并的方法
// console.dir($)
// console.dir($())
// console.dir($() === $)

// const jsdom = require('jsdom')
// const { JSDOM } = jsdom
// const { window } = new JSDOM(`<!DOCTYPE html>`)
// const $ = require('jQuery')(window)
// console.dir($)
// // 方法1：使用JQuery的extend方法
// var o1 = { a: 'a' }
// var o2 = { b: 'b' }

// const o3 = $.extend(o1, o2)
// // 合并 o1 和 o2， 将结果返回给 o3. 注意： 此时，o1 == o3! 即 o1 被修改
// console.log(o3)

// // 或
// o3 = $.extend({}, o1, o2) // 合并 o1 和 o2， 将结果返回给 o3. 注意： 此时，o1 ！= o3! 即 o1 没有被修改
// console.log(o3)

// 2. 用 Object.assign()
// va
// o1 = { a: 1 }
// var o2 = { b: 2 }
// var o3 = { c: 3 }

// var obj = Object.assign(o1, o2, o3)
// console.log(obj) // { a: 1, b: 2, c: 3 }
// console.log(o1) // { a: 1, b: 2, c: 3 }, 注意目标对象自身也会改变。
// console.info(o2) // { b: 2 }
// console.info(o3) // { c: 3 }
// 和$.extend相同，将对象合并到第一个对象中。
// 用 Object.assign() 实现对象的浅拷贝
// oject.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象

// 方法3：遍历赋值法
// 代码逻辑：

// 循环对象n中的每一个对应属性。
// 确认对象n中存在该属性
// 确认对象o中不存在该属性
// var o1 = { a: 1, b: 2, c: 3 }
// var o2 = { a: 1, d: 4 }
// var extend = function(o, n) {
//   for (var key in n) {
//     if (n.hasOwnProperty(key) && (!o.hasOwnProperty(key))) { o[key] = n[key] }
//   }
// }

// extend(o2, o1)

// console.log(o2) // { a: 1, d: 4, b: 2, c: 3 }
// console.log(o1) // { a: 1, d: 4, b: 2, c: 3 }

// -------------------------- 对象的深拷贝和浅拷贝
// 浅拷贝：仅仅复制对象的引用，而不是对象本身；
// 深拷贝：把复制的对象所引用的全部对象都复制一遍。
// -------- 浅拷贝 Object.assign() 和 ...两种方法
// const obj1 = { a: 0, b: { c: 0 }}
// const obj2 = Object.assign({}, obj1)
// console.log(obj2) // { a: 0, b: { c: 0}}

// const obj3 = { ...obj1 }
// console.log(obj3) // // { a: 0, b: { c: 0}}

// -------- 深拷贝 JSON.parse(JSON.stringify(object))
// const obj1 = {
//   a: 10,
//   b: 20,
//   c: {
//     arr: [
//       { name: '小明' },
//       { name: '小花' }
//     ]
//   }
// }

// const obj2 = JSON.parse(JSON.stringify(obj1))
// console.log(obj2) //  { a: 10, b: 20, c: { arr: [ [Object], [Object] ] } }

// ---- 解构
// var arr = ['this is a string', 2, 3]

// // 解构赋值，是不是简洁很多？
// var [a, b] = arr

// console.log(a) // this is a string
// console.log(b) // 2
// // console.log(c) // 3

